{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to train your own word vector embeddings using Gensim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Many tasks require embeddings or domain-specific vocabulary that pre-trained models based on a generic corpus may not represent well or at all. Standard word2vec models are not able to assign vectors to out-of-vocabulary words and instead use a default vector that reduces their predictive value.\n",
    "\n",
    "E.g., when working with industry-specific documents, the vocabulary or its usage may change over time as new technologies or products emerge. As a result, the embeddings need to evolve as well. In addition, corporate earnings releases use nuanced language not fully reflected in Glove vectors pre-trained on Wikipedia articles.\n",
    "\n",
    "In this notebook we illustrate the more performant gensim adaptation of the code provided by the word2vec authors. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To illustrate the word2vec network architecture, we use the Financial News data that we first introduced in chapter 14 on Topic Modeling. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:23:23.400390Z",
     "start_time": "2020-03-12T17:23:23.390154Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline \n",
    "import warnings\n",
    "from time import time\n",
    "from collections import Counter\n",
    "from pathlib import Path\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from numpy.linalg import norm\n",
    "from scipy.spatial.distance import cdist, cosine\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FuncFormatter\n",
    "import seaborn as sns\n",
    "\n",
    "from gensim.models import Word2Vec, KeyedVectors\n",
    "from gensim.models.word2vec import LineSentence\n",
    "from sklearn.decomposition import IncrementalPCA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": ""
    }
   },
   "source": [
    "### Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.006787Z",
     "start_time": "2020-03-12T16:24:47.004310Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "warnings.filterwarnings('ignore')\n",
    "sns.set_style('whitegrid')\n",
    "pd.set_option('float_format', '{:,.2f}'.format)\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.020587Z",
     "start_time": "2020-03-12T16:24:47.007883Z"
    }
   },
   "outputs": [],
   "source": [
    "news_path = Path('data', 'fin_news')\n",
    "data_path = news_path / 'data'\n",
    "analogy_path = Path('data', 'analogies-en.txt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.029145Z",
     "start_time": "2020-03-12T16:24:47.021590Z"
    }
   },
   "outputs": [],
   "source": [
    "def format_time(t):\n",
    "    m, s = divmod(t, 60)\n",
    "    h, m = divmod(m, 60)\n",
    "    return f'{h:02.0f}:{m:02.0f}:{s:02.0f}'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Model Configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.037026Z",
     "start_time": "2020-03-12T16:24:47.030190Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "gensim_path = news_path / 'gensim'\n",
    "if not gensim_path.exists():\n",
    "    gensim_path.mkdir(parents=True, exist_ok=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.044855Z",
     "start_time": "2020-03-12T16:24:47.037826Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "NGRAMS = 3           # Longest ngram in text\n",
    "MIN_FREQ = 100\n",
    "WINDOW_SIZE = 5\n",
    "EMBEDDING_SIZE = 300\n",
    "NEGATIVE_SAMPLES = 20\n",
    "EPOCHS = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.057906Z",
     "start_time": "2020-03-12T16:24:47.045654Z"
    }
   },
   "outputs": [],
   "source": [
    "FILE_NAME = f'articles_{NGRAMS}_grams.txt'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Sentence Generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:24:47.065931Z",
     "start_time": "2020-03-12T16:24:47.059226Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "sentence_path = data_path / FILE_NAME\n",
    "sentences = LineSentence(str(sentence_path))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Train word2vec Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:06.683093Z",
     "start_time": "2020-03-12T16:24:47.067180Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Duration: 00:02:50\n"
     ]
    }
   ],
   "source": [
    "start = time()\n",
    "model = Word2Vec(sentences, \n",
    "                 sg=1, # set to 1 for skipgram; CBOW otherwise\n",
    "                 size=EMBEDDING_SIZE, \n",
    "                 window=WINDOW_SIZE,\n",
    "                 min_count=MIN_FREQ, \n",
    "                 negative=NEGATIVE_SAMPLES, \n",
    "                 workers=8,\n",
    "                 iter=EPOCHS, \n",
    "                 alpha=0.05)\n",
    "\n",
    "# persist model\n",
    "model.save(str(gensim_path / 'word2vec.model'))\n",
    "\n",
    "# persist word vectors\n",
    "model.wv.save(str(gensim_path / 'word_vectors.bin'))\n",
    "print('Duration:', format_time(time() - start))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## Evaluate results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:11:47.165473Z",
     "start_time": "2020-03-12T17:11:47.162569Z"
    }
   },
   "outputs": [],
   "source": [
    "cat_dict = {'capital-common-countries':'Capitals',\n",
    "            'capital-world':'Capitals RoW',\n",
    "            'city-in-state':'City-State',\n",
    "            'currency':'Currency',\n",
    "            'family':'Famliy',\n",
    "            'gram1-adjective-to-adverb':'Adj-Adverb',\n",
    "            'gram2-opposite':'Opposite',\n",
    "            'gram3-comparative':'Comparative',\n",
    "            'gram4-superlative':'Superlative',\n",
    "            'gram5-present-participle':'Pres. Part.',\n",
    "            'gram6-nationality-adjective':'Nationality',\n",
    "            'gram7-past-tense':'Past Tense',\n",
    "            'gram8-plural':'Plural',\n",
    "            'gram9-plural-verbs':'Plural Verbs',\n",
    "            'total':'Total'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:06.690869Z",
     "start_time": "2020-03-12T16:27:06.685277Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def accuracy_by_category(acc, detail=True):\n",
    "    results = [[c['section'], len(c['correct']), len(c['incorrect'])] for c in acc]\n",
    "    results = pd.DataFrame(results, columns=['category', 'correct', 'incorrect'])\n",
    "    results['average'] = results.correct.div(results[['correct', 'incorrect']].sum(1))\n",
    "    if detail:\n",
    "        print(results.sort_values('average', ascending=False))\n",
    "    return results.loc[results.category=='total', ['correct', 'incorrect', 'average']].squeeze().tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:12:43.211614Z",
     "start_time": "2020-03-12T17:12:25.218075Z"
    }
   },
   "outputs": [],
   "source": [
    "# gensim computes accuracy based on source text files\n",
    "detailed_accuracy = model.wv.accuracy(analogy_path.as_posix(), case_insensitive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:12:43.248617Z",
     "start_time": "2020-03-12T17:12:43.212843Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                       category  correct  incorrect  average\n",
      "0      capital-common-countries      322         98     0.77\n",
      "10  gram6-nationality-adjective      732        324     0.69\n",
      "1                 capital-world      678        512     0.57\n",
      "7             gram3-comparative      307        563     0.35\n",
      "14                        total     2941       5639     0.34\n",
      "4                        family       37         73     0.34\n",
      "8             gram4-superlative       87        185     0.32\n",
      "11             gram7-past-tense      332        790     0.30\n",
      "3                      currency       24        104     0.19\n",
      "9      gram5-present-participle      108        492     0.18\n",
      "12                 gram8-plural       54        252     0.18\n",
      "13           gram9-plural-verbs       77        429     0.15\n",
      "2                 city-in-state      153       1203     0.11\n",
      "6                gram2-opposite       10        172     0.05\n",
      "5     gram1-adjective-to-adverb       20        442     0.04\n",
      "Base Accuracy: Correct 2,941 | Wrong 5,639 | Avg 34.28%\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# get accuracy per category\n",
    "summary = accuracy_by_category(detailed_accuracy)\n",
    "print('Base Accuracy: Correct {:,.0f} | Wrong {:,.0f} | Avg {:,.2%}\\n'.format(*summary))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:23.477525Z",
     "start_time": "2020-03-12T16:27:23.448875Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>token</th>\n",
       "      <th>similarity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>meghan</td>\n",
       "      <td>0.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>kings</td>\n",
       "      <td>0.42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>princess</td>\n",
       "      <td>0.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>winery</td>\n",
       "      <td>0.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>keller</td>\n",
       "      <td>0.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>angela</td>\n",
       "      <td>0.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>curry</td>\n",
       "      <td>0.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>daly</td>\n",
       "      <td>0.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>roman</td>\n",
       "      <td>0.39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>duke</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>barber</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>famed</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>uncle</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>patron</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>moss</td>\n",
       "      <td>0.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>emma</td>\n",
       "      <td>0.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>jake</td>\n",
       "      <td>0.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>kristen</td>\n",
       "      <td>0.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>malik</td>\n",
       "      <td>0.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>von</td>\n",
       "      <td>0.37</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       token  similarity\n",
       "0     meghan        0.43\n",
       "1      kings        0.42\n",
       "2   princess        0.40\n",
       "3     winery        0.40\n",
       "4     keller        0.40\n",
       "5     angela        0.39\n",
       "6      curry        0.39\n",
       "7       daly        0.39\n",
       "8      roman        0.39\n",
       "9       duke        0.38\n",
       "10    barber        0.38\n",
       "11     famed        0.38\n",
       "12     uncle        0.38\n",
       "13    patron        0.38\n",
       "14      moss        0.38\n",
       "15      emma        0.37\n",
       "16      jake        0.37\n",
       "17   kristen        0.37\n",
       "18     malik        0.37\n",
       "19       von        0.37"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "most_sim = model.wv.most_similar(positive=['woman', 'king'], negative=['man'], topn=20)\n",
    "pd.DataFrame(most_sim, columns=['token', 'similarity'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:29.792404Z",
     "start_time": "2020-03-12T16:27:23.478917Z"
    }
   },
   "outputs": [],
   "source": [
    "counter = Counter(sentence_path.read_text().split())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:29.982268Z",
     "start_time": "2020-03-12T16:27:29.793274Z"
    }
   },
   "outputs": [],
   "source": [
    "most_common = pd.DataFrame(counter.most_common(), columns=['token', 'count'])\n",
    "most_common = most_common[most_common['count']> MIN_FREQ]\n",
    "most_common['p'] = np.log(most_common['count'])/np.log(most_common['count']).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:30.015517Z",
     "start_time": "2020-03-12T16:27:29.983135Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>shall_sale</th>\n",
       "      <td>jurisdiction_offer</td>\n",
       "      <td>solicitation_sale_unlawful</td>\n",
       "      <td>prior_registration_qualification</td>\n",
       "      <td>sell_solicitation_offer</td>\n",
       "      <td>offer_solicitation</td>\n",
       "      <td>shall_constitute_offer</td>\n",
       "      <td>buy_shall</td>\n",
       "      <td>solicitation_offer_buy</td>\n",
       "      <td>does_constitute_offer</td>\n",
       "      <td>offer_sell_solicitation</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>identiv</th>\n",
       "      <td>apptio</td>\n",
       "      <td>ooma</td>\n",
       "      <td>juniper_networks</td>\n",
       "      <td>asure_software</td>\n",
       "      <td>palo_alto_networks</td>\n",
       "      <td>interdigital</td>\n",
       "      <td>cheetah_mobile</td>\n",
       "      <td>servicenow</td>\n",
       "      <td>orbcomm</td>\n",
       "      <td>guidewire</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>liquidate</th>\n",
       "      <td>illiquid</td>\n",
       "      <td>liquidating</td>\n",
       "      <td>dispose</td>\n",
       "      <td>defaulted</td>\n",
       "      <td>prior_registration_qualification</td>\n",
       "      <td>offload</td>\n",
       "      <td>divest</td>\n",
       "      <td>bondholders</td>\n",
       "      <td>insolvent</td>\n",
       "      <td>jurisdiction_offer</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>selectively</th>\n",
       "      <td>tumor_microenvironment</td>\n",
       "      <td>inhibit</td>\n",
       "      <td>receptors</td>\n",
       "      <td>cancer_cells</td>\n",
       "      <td>t_cells</td>\n",
       "      <td>inhibition</td>\n",
       "      <td>antigen</td>\n",
       "      <td>allogeneic</td>\n",
       "      <td>molecules</td>\n",
       "      <td>monoclonal_antibodies</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>voting</th>\n",
       "      <td>votes</td>\n",
       "      <td>voted</td>\n",
       "      <td>vote</td>\n",
       "      <td>votes_cast</td>\n",
       "      <td>ballots</td>\n",
       "      <td>polling_stations</td>\n",
       "      <td>election</td>\n",
       "      <td>polling_station</td>\n",
       "      <td>ballot</td>\n",
       "      <td>electing</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>payment</th>\n",
       "      <td>payments</td>\n",
       "      <td>paid</td>\n",
       "      <td>installments</td>\n",
       "      <td>installment</td>\n",
       "      <td>repayment</td>\n",
       "      <td>plus_accrued_unpaid</td>\n",
       "      <td>alipay</td>\n",
       "      <td>accrued_unpaid</td>\n",
       "      <td>pay</td>\n",
       "      <td>accrue</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>nationality</th>\n",
       "      <td>kuciak</td>\n",
       "      <td>sarkozy</td>\n",
       "      <td>arrest_warrant</td>\n",
       "      <td>raped</td>\n",
       "      <td>deport</td>\n",
       "      <td>attempted_murder</td>\n",
       "      <td>deportations</td>\n",
       "      <td>minors</td>\n",
       "      <td>forcibly</td>\n",
       "      <td>immigrant</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>arpu</th>\n",
       "      <td>postpaid</td>\n",
       "      <td>rgus</td>\n",
       "      <td>subscriber</td>\n",
       "      <td>subscriber_base</td>\n",
       "      <td>churn</td>\n",
       "      <td>subscribers</td>\n",
       "      <td>acv</td>\n",
       "      <td>telephony</td>\n",
       "      <td>ocf</td>\n",
       "      <td>arr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beijing_monitoring_desk</th>\n",
       "      <td>editing_kim_coghill</td>\n",
       "      <td>sam_holmes</td>\n",
       "      <td>editing_jacqueline_wong</td>\n",
       "      <td>himani_sarkar</td>\n",
       "      <td>kim_coghill</td>\n",
       "      <td>editing_muralikumar_anantharaman</td>\n",
       "      <td>shri_navaratnam</td>\n",
       "      <td>christopher_cushing</td>\n",
       "      <td>shanghai_newsroom</td>\n",
       "      <td>editing_sam_holmes</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              0                           1  \\\n",
       "shall_sale                   jurisdiction_offer  solicitation_sale_unlawful   \n",
       "identiv                                  apptio                        ooma   \n",
       "liquidate                              illiquid                 liquidating   \n",
       "selectively              tumor_microenvironment                     inhibit   \n",
       "voting                                    votes                       voted   \n",
       "payment                                payments                        paid   \n",
       "nationality                              kuciak                     sarkozy   \n",
       "arpu                                   postpaid                        rgus   \n",
       "beijing_monitoring_desk     editing_kim_coghill                  sam_holmes   \n",
       "\n",
       "                                                        2  \\\n",
       "shall_sale               prior_registration_qualification   \n",
       "identiv                                  juniper_networks   \n",
       "liquidate                                         dispose   \n",
       "selectively                                     receptors   \n",
       "voting                                               vote   \n",
       "payment                                      installments   \n",
       "nationality                                arrest_warrant   \n",
       "arpu                                           subscriber   \n",
       "beijing_monitoring_desk           editing_jacqueline_wong   \n",
       "\n",
       "                                               3  \\\n",
       "shall_sale               sell_solicitation_offer   \n",
       "identiv                           asure_software   \n",
       "liquidate                              defaulted   \n",
       "selectively                         cancer_cells   \n",
       "voting                                votes_cast   \n",
       "payment                              installment   \n",
       "nationality                                raped   \n",
       "arpu                             subscriber_base   \n",
       "beijing_monitoring_desk            himani_sarkar   \n",
       "\n",
       "                                                        4  \\\n",
       "shall_sale                             offer_solicitation   \n",
       "identiv                                palo_alto_networks   \n",
       "liquidate                prior_registration_qualification   \n",
       "selectively                                       t_cells   \n",
       "voting                                            ballots   \n",
       "payment                                         repayment   \n",
       "nationality                                        deport   \n",
       "arpu                                                churn   \n",
       "beijing_monitoring_desk                       kim_coghill   \n",
       "\n",
       "                                                        5                6  \\\n",
       "shall_sale                         shall_constitute_offer        buy_shall   \n",
       "identiv                                      interdigital   cheetah_mobile   \n",
       "liquidate                                         offload           divest   \n",
       "selectively                                    inhibition          antigen   \n",
       "voting                                   polling_stations         election   \n",
       "payment                               plus_accrued_unpaid           alipay   \n",
       "nationality                              attempted_murder     deportations   \n",
       "arpu                                          subscribers              acv   \n",
       "beijing_monitoring_desk  editing_muralikumar_anantharaman  shri_navaratnam   \n",
       "\n",
       "                                              7                      8  \\\n",
       "shall_sale               solicitation_offer_buy  does_constitute_offer   \n",
       "identiv                              servicenow                orbcomm   \n",
       "liquidate                           bondholders              insolvent   \n",
       "selectively                          allogeneic              molecules   \n",
       "voting                          polling_station                 ballot   \n",
       "payment                          accrued_unpaid                    pay   \n",
       "nationality                              minors               forcibly   \n",
       "arpu                                  telephony                    ocf   \n",
       "beijing_monitoring_desk     christopher_cushing      shanghai_newsroom   \n",
       "\n",
       "                                               9  \n",
       "shall_sale               offer_sell_solicitation  \n",
       "identiv                                guidewire  \n",
       "liquidate                     jurisdiction_offer  \n",
       "selectively                monoclonal_antibodies  \n",
       "voting                                  electing  \n",
       "payment                                   accrue  \n",
       "nationality                            immigrant  \n",
       "arpu                                         arr  \n",
       "beijing_monitoring_desk       editing_sam_holmes  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "similars = pd.DataFrame()\n",
    "for token in np.random.choice(most_common.token, size=10, p=most_common.p):\n",
    "    similars[token] = [s[0] for s in model.wv.most_similar(token)]\n",
    "similars.T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Continue Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:49:01.454008Z",
     "start_time": "2020-03-12T16:27:30.016577Z"
    },
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "01 | Duration: 00:02:48 | Accuracy: 39.17% \n",
      "02 | Duration: 00:02:46 | Accuracy: 40.05% \n",
      "03 | Duration: 00:02:54 | Accuracy: 40.79% \n",
      "04 | Duration: 00:02:58 | Accuracy: 40.27% \n",
      "05 | Duration: 00:02:39 | Accuracy: 40.55% \n",
      "06 | Duration: 00:02:41 | Accuracy: 40.66% \n",
      "07 | Duration: 00:02:40 | Accuracy: 41.82% \n",
      "08 | Duration: 00:02:44 | Accuracy: 40.80% \n",
      "09 | Duration: 00:02:34 | Accuracy: 41.26% \n"
     ]
    }
   ],
   "source": [
    "accuracies = [summary]\n",
    "best_accuracy = summary[-1]\n",
    "for i in range(1, 10):\n",
    "    start = time()\n",
    "    model.train(sentences, epochs=1, total_examples=model.corpus_count)\n",
    "    detailed_accuracy = model.wv.accuracy(analogy_path)\n",
    "    accuracies.append(accuracy_by_category(detailed_accuracy, detail=False))\n",
    "    print(f'{i:02} | Duration: {format_time(time() - start)} | Accuracy: {accuracies[-1][-1]:.2%} ')\n",
    "    if accuracies[-1][-1] > best_accuracy:\n",
    "        model.save(str(gensim_path / f'word2vec_{i:02}.model'))\n",
    "        model.wv.save(str(gensim_path / f'word_vectors_{i:02}.bin'))\n",
    "        best_accuracy = accuracies[-1][-1]\n",
    "    (pd.DataFrame(accuracies, \n",
    "                 columns=['correct', 'wrong', 'average'])\n",
    "     .to_csv(gensim_path / 'accuracies.csv', index=False))\n",
    "model.wv.save(str(gensim_path / 'word_vectors_final.bin'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate Best Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:57:42.040316Z",
     "start_time": "2020-03-12T16:57:41.820149Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.DataFrame(accuracies, columns=['correct', 'wrong', 'average'], index=list(range(1, len(accuracies) + 1))).average.plot();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:00:32.232913Z",
     "start_time": "2020-03-12T17:00:31.937349Z"
    }
   },
   "outputs": [],
   "source": [
    "best_model = Word2Vec.load((gensim_path / 'word2vec_06.model').as_posix())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:02:13.767834Z",
     "start_time": "2020-03-12T17:01:56.365584Z"
    }
   },
   "outputs": [],
   "source": [
    "# gensim computes accuracy based on source text files\n",
    "detailed_accuracy = best_model.wv.accuracy(analogy_path.as_posix(), case_insensitive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:02:13.790580Z",
     "start_time": "2020-03-12T17:02:13.770221Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                       category  correct  incorrect  average\n",
      "0      capital-common-countries      356         64     0.85\n",
      "1                 capital-world      911        279     0.77\n",
      "10  gram6-nationality-adjective      767        289     0.73\n",
      "14                        total     3582       4998     0.42\n",
      "7             gram3-comparative      344        526     0.40\n",
      "4                        family       41         69     0.37\n",
      "11             gram7-past-tense      351        771     0.31\n",
      "12                 gram8-plural       86        220     0.28\n",
      "2                 city-in-state      372        984     0.27\n",
      "8             gram4-superlative       71        201     0.26\n",
      "3                      currency       32         96     0.25\n",
      "9      gram5-present-participle      125        475     0.21\n",
      "13           gram9-plural-verbs       72        434     0.14\n",
      "5     gram1-adjective-to-adverb       40        422     0.09\n",
      "6                gram2-opposite       14        168     0.08\n",
      "Base Accuracy: Correct 3,582 | Wrong 4,998 | Avg 41.75%\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# get accuracy per category\n",
    "summary = accuracy_by_category(detailed_accuracy)\n",
    "print('Base Accuracy: Correct {:,.0f} | Wrong {:,.0f} | Avg {:,.2%}\\n'.format(*summary))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:25:41.119465Z",
     "start_time": "2020-03-12T17:25:41.091975Z"
    }
   },
   "outputs": [],
   "source": [
    "results = [[c['section'], len(c['correct']), len(c['incorrect'])] for c in detailed_accuracy]\n",
    "results = pd.DataFrame(results, columns=['category', 'correct', 'incorrect'])\n",
    "results['category'] = results.category.map(cat_dict)\n",
    "results['average'] = results.correct.div(results[['correct', 'incorrect']].sum(1))\n",
    "results = results.rename(columns=str.capitalize).set_index('Category')\n",
    "total = results.loc['Total']\n",
    "results = results.drop('Total')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:02:13.816133Z",
     "start_time": "2020-03-12T17:02:13.792634Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>token</th>\n",
       "      <th>similarity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>lewis</td>\n",
       "      <td>0.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>monarch</td>\n",
       "      <td>0.36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>queen</td>\n",
       "      <td>0.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>kate</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>william</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>prince</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>son</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>james</td>\n",
       "      <td>0.34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>street</td>\n",
       "      <td>0.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>paul</td>\n",
       "      <td>0.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>von</td>\n",
       "      <td>0.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>hill</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>george</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>martin</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>murray</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>tyler</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>regional</td>\n",
       "      <td>0.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>ext</td>\n",
       "      <td>0.31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>charlie</td>\n",
       "      <td>0.31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>clark</td>\n",
       "      <td>0.31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       token  similarity\n",
       "0      lewis        0.36\n",
       "1    monarch        0.36\n",
       "2      queen        0.35\n",
       "3       kate        0.34\n",
       "4    william        0.34\n",
       "5     prince        0.34\n",
       "6        son        0.34\n",
       "7      james        0.34\n",
       "8     street        0.33\n",
       "9       paul        0.33\n",
       "10       von        0.33\n",
       "11      hill        0.32\n",
       "12    george        0.32\n",
       "13    martin        0.32\n",
       "14    murray        0.32\n",
       "15     tyler        0.32\n",
       "16  regional        0.32\n",
       "17       ext        0.31\n",
       "18   charlie        0.31\n",
       "19     clark        0.31"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "most_sim = best_model.wv.most_similar(positive=['woman', 'king'], negative=['man'], topn=20)\n",
    "pd.DataFrame(most_sim, columns=['token', 'similarity'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:30:26.704078Z",
     "start_time": "2020-03-12T17:30:25.758666Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAFgCAYAAADAT84SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXxM1//H8ddMVlmIJZRGKokGrYbaYoklqkJRpG02gipaLf2G0tgFVUtTFLXrD7EltipabS21NUJtQa1pLVElhMi+TM7vD9/MV8rUksRM4vP8x8ydO3fe50weM9dnzj1Ho5RSCCGEEEIIIYQQQohiS2vsAEIIIYQQQgghhBCiYKTAI4QQQgghhBBCCFHMSYFHCCGEEEIIIYQQopiTAo8QQgghhBBCCCFEMScFHiGEEEIIIYQQQohiTgo8QgghhBBCCCGEEMWcFHiEKMays7Px8vKiT58+BT5WjRo1SExMLIRUDxcREUGNGjU4evToU3k9IYQQQuSn0+n4v//7P3x9fencuTNvvPEGX3zxBVlZWQAMGzaMxYsXP7U8sbGxjBkzpsiO37t374ee57Ru3Zrjx48XyevPnTuXVq1aMXz48Cd6/tGjR/H09CQ3N1e/bfDgwdSuXZuUlBT9trCwML744osC533a/vn3lpycTLdu3fj444/Jyspi5MiR/Prrr08lS40aNWjdujVKqXzbZ82aRY0aNYrsb0SIwiAFHiGKsZ9//pmaNWty4sQJ4uLijB3nka1evZpOnTqxdOlSY0cRQgghnklhYWEcOXKEpUuXsnHjRtauXcuff/7JyJEjjZLn/PnzXLt2rciOv2/fviI79qNYu3Yt4eHhTJo06Yme7+HhAcCZM2cAyMnJISYmBk9PT/bs2aPfb//+/bRq1arAeY3p5s2b9OjRgxo1ajBjxgwsLS2ZOHEiTZs2fWoZlFL89ttv+e7/8MMPlClT5qllEOJJmBs7gBDiya1atYo33ngDZ2dnli5dyvjx44mJiWH69OlUrVqVc+fOkZOTw7hx46hfvz5//vkn48ePJzU1lYSEBGrWrMmMGTOwsrLKd9yvv/6aLVu2YGZmhouLC6NHj8bR0ZGLFy8yYsQIkpKScHR0RCnFm2++ybVr1zh//jxffvklAL/99hufffYZ33777X2ZY2JiSEpKYujQobz++utcvXqVypUrA5CQkMDYsWP5448/0Gq1BAQE0KNHD4Pbg4OD6datG+3atQPId7927dq89tprnD59mvDwcM6cOUNkZCTZ2dkkJSXRt29fgoKCAJg/fz4bNmzA3NycF154gcmTJ/Pxxx/Tvn17/Pz8AJgzZw63b99mxIgRRfZ+CiGEEE9DfHw8mzZtYu/evdjZ2QFgY2PDuHHjOHz48H37//bbb0ydOpX09HQsLCwICQmhRYsWJCQkEBoayq1btwBo2bIlISEhAKxZs4ZVq1aRm5uLg4MDo0ePxs3Njd9++43JkyfrR6K8//77eHh4MHPmTJKTkxk+fPh9RZDWrVvTsWNH9u/fT1JSEn369OHw4cOcPHkSc3Nz5s6dS6VKldi5cyfz588nKyuLxMREunTpQkhIiH7UTM+ePVmwYAEZGRmMGTOGxMREtFot/fv354033gAgMjKSsWPHkpiYSOfOnRk0aBAAO3bsYO7cuWRnZ2NtbU1oaCivvvoqcXFxjBw5kqysLJRSvP3223Tr1i1f/pCQEK5du8bIkSP5z3/+Q7169QgLC+PKlSsopejSpQt9+vQhPj6ebt264ebmxpUrV4iIiKBixYoAaLVavLy8iImJoVatWhw6dIgaNWrQrl07duzYQfv27bl27Ro3b97k1VdfBQyfzwUHB/Pyyy9z9OhREhMT8fPz48aNGxw4cID09HRmzJihH2mdN6orISGBpk2b8vnnnxMfH0+vXr1o2bIlx44d486dO/rzOkNat27NsmXLcHJy+te/zb/++ovevXvTuXNn+vfvr9+ed45Xu3Ztg6+dnp7O2LFjOXbsGPb29lSvXh2AyZMn/+trPsibb77Jd999R8OGDQE4dOgQ1atXJyMjQ7/PvHnz2L59OxkZGaSnpxMaGsrrr7/OrFmzuHLlCgkJCVy5coVKlSrxxRdf6N9LIYqUEkIUS+fOnVMvv/yySkxMVMeOHVMeHh4qMTFR7d+/X9WqVUv9/vvvSimlFi9erLp166aUUmry5Mnq22+/VUoplZWVpTp27Ki2bt2qlFLK3d1d3bx5U61du1b5+/ur1NRUpZRSM2fOVL1791ZKKeXn56dWrFihlFLq/Pnzqk6dOmrdunXqxo0bql69eurWrVtKKaWGDh2qVq1a9cDcH3/8sZo8ebJSSqm+ffuqqVOn6h/76KOP1JQpU5RSSt25c0d16NBBXbhwweD27t27qx9++EH//Hvvu7u7qw0bNiillEpJSVF+fn4qMTFRKaXUkSNHVN26dZVSSm3btk21bdtW3b59Wyml1Oeff67mzJmjfv75Z/XWW28ppZTS6XTK29tbxcXFPd6bJIQQQpigrVu36r/jDAkNDVWLFi1SiYmJqkmTJuro0aNKKaXOnj2rGjVqpC5duqRmz56tRo8erZRSKjU1VYWEhKg7d+6omJgYFRQUpNLS0pRSSu3Zs0e1a9dOKaVUjx491ObNm5VSSp06dUqFhYUppZRat26d6tev3wOzeHt7q88//1wppdSWLVtUzZo11alTp5RSSn344Ydq7ty5Kjc3V3Xv3l39+eefSiml/v77b1WrVi118+ZNpdT/znOUUqpLly5q+fLlSiml/vrrL/Xaa6+p5ORk5e3trcaPH6+UUur69euqdu3a6q+//lJ//vmn6tixo/484uzZs6pZs2YqNTVVDR8+XM2fP1//nJCQEKXT6R7YhtjYWKWUUt26dVPffPONUurueU2nTp3U5s2b1eXLl5W7u7s6ePDgA/thw4YNqn///koppSZNmqSWLl2qrl27pho1aqRycnLUhg0bVEhIiFJK/ev5XPfu3dWAAQOUUkodPXpUubu7q+3btyullJo4caIaNWqUUkqpQYMGqf379yul7p5LeXp6quPHj+tz7tixQyl19++pVatWD8x8b/svX75s8PHQ0FA1cuRI1bJlS+Xt7a3/28mTd473b68dHh6uBg8erHQ6nUpOTladOnVSoaGh/5rrQdzd3dXZs2eVp6enyszMVEopNWLECLVjxw79+xgfH6+Cg4NVenq6UkqpzZs3q44dOyql7vZ13t+UUkq9//776quvvnrsHEI8CRnBI0QxtWrVKry9vSlbtixly5bFycmJqKgo6tatS5UqVahVqxYAL730Ehs2bABg6NCh7Nu3j4ULF3LhwgWuX79OWlpavuPu3r0bX19fbGxsAOjRowfz5s3jxo0bxMbGsnz5cgDc3Nxo3LgxAOXLl6dVq1Zs3LiRLl26sHfvXsaOHXtf5oSEBLZv3866desA6NKlC2FhYXz00UfY2Njw66+/MnToUADs7e3ZvHkzgMHtD9OgQQMAbG1tmTdvHrt27eLChQucPn1a3+7o6GjatWunH3Kb9yufTqdj4sSJnD59mmvXruHk5ISr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\n",
      "text/plain": [
       "<Figure size 1152x360 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(figsize=(16, 5), ncols=2)\n",
    "\n",
    "axes[0] = results.loc[:, ['Correct', 'Incorrect']].plot.bar(stacked=True, ax=axes[0]\n",
    "                                                           , title='Analogy Accuracy')\n",
    "ax1 = results.loc[:, ['Average']].plot(ax=axes[0], secondary_y=True, lw=1, c='k', rot=35)\n",
    "ax1.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y)))\n",
    "\n",
    "(pd.DataFrame(most_sim, columns=['token', 'similarity'])\n",
    " .set_index('token').similarity\n",
    " .sort_values().tail(10).plot.barh(xlim=(.3, .37), ax=axes[1], title='Closest matches for Woman + King - Man'))\n",
    "fig.tight_layout()\n",
    "fig.savefig('figures/w2v_evaluation', dpi=300);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:29.792404Z",
     "start_time": "2020-03-12T16:27:23.478917Z"
    }
   },
   "outputs": [],
   "source": [
    "counter = Counter(sentence_path.read_text().split())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T16:27:29.982268Z",
     "start_time": "2020-03-12T16:27:29.793274Z"
    }
   },
   "outputs": [],
   "source": [
    "most_common = pd.DataFrame(counter.most_common(), columns=['token', 'count'])\n",
    "most_common = most_common[most_common['count']> MIN_FREQ]\n",
    "most_common['p'] = np.log(most_common['count'])/np.log(most_common['count']).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T17:06:47.230838Z",
     "start_time": "2020-03-12T17:06:47.199066Z"
    },
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>risks_uncertainties</th>\n",
       "      <td>cause_actual</td>\n",
       "      <td>factors</td>\n",
       "      <td>uncertainties</td>\n",
       "      <td>known_unknown_risks_uncertainties</td>\n",
       "      <td>differ_materially</td>\n",
       "      <td>differ_materially_expressed_implied</td>\n",
       "      <td>risks</td>\n",
       "      <td>statements</td>\n",
       "      <td>assumptions</td>\n",
       "      <td>involve</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wheeler_real_estate</th>\n",
       "      <td>trust</td>\n",
       "      <td>gladstone</td>\n",
       "      <td>infrareit</td>\n",
       "      <td>reit</td>\n",
       "      <td>redwood</td>\n",
       "      <td>gi_partners</td>\n",
       "      <td>matthew</td>\n",
       "      <td>essex</td>\n",
       "      <td>agf</td>\n",
       "      <td>riocan</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>culinary</th>\n",
       "      <td>chef</td>\n",
       "      <td>dining</td>\n",
       "      <td>restaurant</td>\n",
       "      <td>wine</td>\n",
       "      <td>coffee</td>\n",
       "      <td>beverage</td>\n",
       "      <td>attractions</td>\n",
       "      <td>garden</td>\n",
       "      <td>guests</td>\n",
       "      <td>educational</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>expensive</th>\n",
       "      <td>cheaper</td>\n",
       "      <td>costly</td>\n",
       "      <td>cheap</td>\n",
       "      <td>cheapest</td>\n",
       "      <td>difficult</td>\n",
       "      <td>more</td>\n",
       "      <td>like</td>\n",
       "      <td>consuming</td>\n",
       "      <td>easier</td>\n",
       "      <td>complicated</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>fy</th>\n",
       "      <td>compensation_mln_vs</td>\n",
       "      <td>mln</td>\n",
       "      <td>versus</td>\n",
       "      <td>qtrly</td>\n",
       "      <td>sees_fy</td>\n",
       "      <td>ceo</td>\n",
       "      <td>total</td>\n",
       "      <td>cfo</td>\n",
       "      <td>quarter</td>\n",
       "      <td>compensation</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>modern</th>\n",
       "      <td>architecture</td>\n",
       "      <td>ai</td>\n",
       "      <td>contemporary</td>\n",
       "      <td>functionality</td>\n",
       "      <td>innovative</td>\n",
       "      <td>elegant</td>\n",
       "      <td>cutting_edge</td>\n",
       "      <td>innovations</td>\n",
       "      <td>mission</td>\n",
       "      <td>platform</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>advocacy</th>\n",
       "      <td>nonprofit</td>\n",
       "      <td>education</td>\n",
       "      <td>groups</td>\n",
       "      <td>practice</td>\n",
       "      <td>advocate</td>\n",
       "      <td>philanthropy</td>\n",
       "      <td>advocates</td>\n",
       "      <td>awareness</td>\n",
       "      <td>mentoring</td>\n",
       "      <td>lgbt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>worsening</th>\n",
       "      <td>severe</td>\n",
       "      <td>dire</td>\n",
       "      <td>symptoms</td>\n",
       "      <td>diarrhea</td>\n",
       "      <td>acute</td>\n",
       "      <td>suffer</td>\n",
       "      <td>plight</td>\n",
       "      <td>influx</td>\n",
       "      <td>escalating</td>\n",
       "      <td>fever</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>hawkish</th>\n",
       "      <td>dovish</td>\n",
       "      <td>fed</td>\n",
       "      <td>rate_hikes</td>\n",
       "      <td>yellen</td>\n",
       "      <td>federal_reserve</td>\n",
       "      <td>monetary_policy</td>\n",
       "      <td>powell</td>\n",
       "      <td>hike</td>\n",
       "      <td>policy</td>\n",
       "      <td>tone</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>an</th>\n",
       "      <td>the</td>\n",
       "      <td>very</td>\n",
       "      <td>it</td>\n",
       "      <td>a</td>\n",
       "      <td>called</td>\n",
       "      <td>appears</td>\n",
       "      <td>earlier</td>\n",
       "      <td>was</td>\n",
       "      <td>this</td>\n",
       "      <td>scenario</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       0          1              2  \\\n",
       "risks_uncertainties         cause_actual    factors  uncertainties   \n",
       "wheeler_real_estate                trust  gladstone      infrareit   \n",
       "culinary                            chef     dining     restaurant   \n",
       "expensive                        cheaper     costly          cheap   \n",
       "fy                   compensation_mln_vs        mln         versus   \n",
       "modern                      architecture         ai   contemporary   \n",
       "advocacy                       nonprofit  education         groups   \n",
       "worsening                         severe       dire       symptoms   \n",
       "hawkish                           dovish        fed     rate_hikes   \n",
       "an                                   the       very             it   \n",
       "\n",
       "                                                     3                  4  \\\n",
       "risks_uncertainties  known_unknown_risks_uncertainties  differ_materially   \n",
       "wheeler_real_estate                               reit            redwood   \n",
       "culinary                                          wine             coffee   \n",
       "expensive                                     cheapest          difficult   \n",
       "fy                                               qtrly            sees_fy   \n",
       "modern                                   functionality         innovative   \n",
       "advocacy                                      practice           advocate   \n",
       "worsening                                     diarrhea              acute   \n",
       "hawkish                                         yellen    federal_reserve   \n",
       "an                                                   a             called   \n",
       "\n",
       "                                                       5             6  \\\n",
       "risks_uncertainties  differ_materially_expressed_implied         risks   \n",
       "wheeler_real_estate                          gi_partners       matthew   \n",
       "culinary                                        beverage   attractions   \n",
       "expensive                                           more          like   \n",
       "fy                                                   ceo         total   \n",
       "modern                                           elegant  cutting_edge   \n",
       "advocacy                                    philanthropy     advocates   \n",
       "worsening                                         suffer        plight   \n",
       "hawkish                                  monetary_policy        powell   \n",
       "an                                               appears       earlier   \n",
       "\n",
       "                               7            8             9  \n",
       "risks_uncertainties   statements  assumptions       involve  \n",
       "wheeler_real_estate        essex          agf        riocan  \n",
       "culinary                  garden       guests   educational  \n",
       "expensive              consuming       easier   complicated  \n",
       "fy                           cfo      quarter  compensation  \n",
       "modern               innovations      mission      platform  \n",
       "advocacy               awareness    mentoring          lgbt  \n",
       "worsening                 influx   escalating         fever  \n",
       "hawkish                     hike       policy          tone  \n",
       "an                           was         this      scenario  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "similars = pd.DataFrame()\n",
    "for token in np.random.choice(most_common.token, size=10, p=most_common.p):\n",
    "    similars[token] = [s[0] for s in best_model.wv.most_similar(token)]\n",
    "similars.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-03-12T19:15:01.024387Z",
     "start_time": "2020-03-12T19:15:01.019332Z"
    }
   },
   "outputs": [],
   "source": [
    "similars.T.iloc[:5, :5].to_csv('figures/most_similar.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Resources\n",
    "\n",
    "- [Distributed representations of words and phrases and their compositionality](http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf)\n",
    "- [Efficient estimation of word representations in vector space](https://arxiv.org/pdf/1301.3781.pdf?)\n",
    "- [Sebastian Ruder's Blog](http://ruder.io/word-embeddings-1/)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "47px",
    "left": "38px",
    "right": "1340px",
    "top": "66.5px",
    "width": "362px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
